//
//  HMHomeTableViewController.swift
//  新浪微博
//
//  Created by 饶鹏伟 on 16/4/6.
//  Copyright © 2016年 饶鹏伟. All rights reserved.
//

import UIKit
import SVProgressHUD
private let HomeCellID = "HomeCellID"
class HMHomeTableViewController: HMVisitorTableViewController {

    //tableview对应的视图模型viewModel 懒加载
    private lazy var statusListViewModel: HMStatusListViewModel=HMStatusListViewModel()
    
    //自定义下拉刷新控件
    let myRefresh=HMRefreshControl()
    
    //视图层次结构已经准备完毕 执行的方法
    override func viewDidLoad() {
        super.viewDidLoad()

        //设置页面
        setupUI()
        //加载数据
        loadData()
        
    }
    
    private func setupUI(){
        
        if !userLogin{
            
            //设置首页的引导登陆界面
            visitorView?.setVisitorInfo("关注一些人,回到这里看看有什么惊喜", imageName: "visitordiscover_feed_image_smallicon", isHome: true)
            
            return
        }
        
                //设置登陆状态下 导航条的显示内容 自定义按钮
        navigationItem.rightBarButtonItem=UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: "push")
        navigationItem.leftBarButtonItem=UIBarButtonItem(imageName: "navigationbar_friendsearch", title: nil, target: self, action: "push")
        
        prepareForTableView()

    }
    
    @objc private func push(){
        
        print("push")
        
        //跳转到子界面
        let temp=HMTempViewController()
        
        navigationController?.pushViewController(temp, animated: true)
        
    }
    
    
    //注册cell
    private  func prepareForTableView(){
        //注册cell
        tableView.registerClass(HMStatusCell.self, forCellReuseIdentifier: HomeCellID)
        //设置tableViewCell的固定高度为 
        //设置行高为自动计算
        tableView.rowHeight=UITableViewAutomaticDimension
        
       //设置预估行高  ==> 通过预估行高 给tableView计算 contentSize  -> tableView才可以滚动  -> 减少 tableView行高的计算
        tableView.estimatedRowHeight=300
        
        //取消cell分割线
        tableView.separatorStyle = .None
        
        //设置 当上拉加载更多时 底部显示视图
        tableView.tableFooterView=indicatorView
        
        //设置 当下拉刷新时 顶部显示视图
        //refreshControl=UIRefreshControl()
        
        //设置下拉的监听事件
       myRefresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        // 把控件添加到视图上
        tableView.addSubview(myRefresh)
    }
    
    
    //加载数据
   @objc private func loadData(){
        
         //使用ViewModel请求数据
        statusListViewModel.loadHomagePageData(indicatorView.isAnimating()){ (isSuccess) -> () in
            
            //不管是加载成功还是失败 都应该停止refreshContro的转动 并且回到最顶部
            //self.refreshControl?.endRefreshing()
            self.myRefresh.endRefreshing()
            
            if !isSuccess{
                
                SVProgressHUD.showErrorWithStatus("没有网络")
                
                return
            }
            
            //如果成功停止菊花的转动
            self.indicatorView.stopAnimating()
            
            
            //刷新界面
            self.tableView.reloadData()
            
        }
        
        
    }
    
    
    //懒加载底部加载视图
    private lazy var indicatorView: UIActivityIndicatorView = {
        
        let v = UIActivityIndicatorView(activityIndicatorStyle: .Gray)

        return v
        
    }()
    
    
}


//实现数据源方法 和 协议方法
extension HMHomeTableViewController{
    
    
    //返回多少组数据
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        
        return 1
    }
    
    //每组返回多少行数据
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statusListViewModel.statusArray.count
    }
    
    
    //每行返回什么数据
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        
        /* 如果不手动注册cell 会报下面的错误
        'unable to dequeue a cell with identifier HomeCellId - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
        必须手动注册cell  xib/sb -> 属性设置框中填写 可重用标示符
        手写代码  手动调用注册cell的方法
        */
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellID, forIndexPath: indexPath) as! HMStatusCell
        //每个cell模型 在statusViewModel放着 定义一个statusViewModel 每次cell用到模型 直接去statusViewModel里面拿就行 不用直接找cell了 cell与statusViewModel 一对一
        cell.statusViewModel = statusListViewModel.statusArray[indexPath.row]
        
        
        //如果小菊花没有转动 并且 正在加载最后一个cell 加载新数据刷新界面 转动小菊花
        if !indicatorView.isAnimating() && indexPath.row == statusListViewModel.statusArray.count-1{
            //开始菊花转
            indicatorView.startAnimating()
            //加载新的数据
            loadData()
            
        }
        
        return cell
    }
    
}










